/*
 * Copyright 2008 Ayman Al-Sairafi ayman.alsairafi@gmail.com Licensed under the Apache License, Version 2.0 (the "License"); you may not use
 * this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */
package jsyntaxpane.actions;

import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.ActionEvent;

import javax.swing.SwingUtilities;
import javax.swing.text.JTextComponent;

import jsyntaxpane.SyntaxDocument;
import jsyntaxpane.actions.gui.BeanshellReflectCompletionDialog;

/**
 * ComboBox like Completion Action: This will display a list of items to choose from, its can be used similar to IntelliSense
 */
public class BeanshellReflectCompletionAction extends DefaultSyntaxAction {

    private volatile BeanshellReflectCompletionDialog reflectDialog;

    public static final String ACTION_NAME = "REFLECT_COMPLETION";

    /**
     * 
     */
    public BeanshellReflectCompletionAction() {
        super(ACTION_NAME);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void actionPerformed(JTextComponent target, SyntaxDocument sDoc, int dot, ActionEvent e) {
        if (reflectDialog == null) {
            Window owner = SwingUtilities.getWindowAncestor(target);
            if (owner instanceof Frame) {
                reflectDialog = new BeanshellReflectCompletionDialog((Frame) owner, target);
            } else {
                reflectDialog = new BeanshellReflectCompletionDialog((Dialog) owner, target);
            }
        }
        reflectDialog.displayFor(target);
    }

    /**
     * @return the dlg
     */
    public BeanshellReflectCompletionDialog getReflectDialog() {
        return reflectDialog;
    }

    /**
     * @param dlg the dlg to set
     */
    public void setReflectDialog(BeanshellReflectCompletionDialog dlg) {
        this.reflectDialog = dlg;
    }

}
